%NOIP2006-J T3 %input int: s; int: t; int: w; array[1..w] of string: str; %输入文件有 2 行,第 1 行为 3 个正整数,用一个空格隔开:s t w(其中 s 为所使用的最小的字母的序号,t 为所使用的最大的字母的序号。w 为数字的位数, 这 3 个数满足:1≤sr[pointer] \/ (l[pointer]=r[pointer] /\ larger(l,r,pointer+1)) endif; array[1..w] of int: str_int=[ get_num(str[i]) | i in 1..w]; array[0..5,1..w] of var s..t: str_list; %次,Jam还指定使用字母的范围,例如,从2到10,表示只能使用{b,c,d,e,f,g,h,i,j}这些字母。 constraint str_list[0,1..w]=str_int; constraint forall(i in 1..5)(forall(j,k in 1..w where j!=k)(str_list[i,j]!=str_list[i,k])); %在Jam数字中,每个字母互不相同 constraint not exists(i,j in 1..5 where i!=j)(forall(k in 1..w)(str_list[i,k]=str_list[j,k])); constraint forall(i in 1..5)(forall(j in 1..w-1)(str_list[i,j]